package edu.tfh.s2.ehkbot.daten;

import edu.tfh.s2.ehkbot.daten.Zeitgeber.ZeitgeberState;
import edu.tfh.s2.ehkbot.gerete.sensoren.BarcodeScanner;
import edu.tfh.s2.ehkbot.gerete.sensoren.Kamera;
import edu.tfh.s2.ehkbot.steuerung.schnittstellen.Netzwerk;
import edu.tfh.s2.ehkbot.steuerung.schnittstellen.Netzwerk.NetzwerkState;

/**
 * PrototypFactory ist eine Hilfsfactory für InitFactory, für typen die sich Clonen lassen, Siehe Prototyp
 * Pattern. Je nach dem mit welchen Prototypen (z.b. States für das State Pattern) PrototypFactory
 * initaliesiert wird, liefert es andere Objekte aus. Wird gebraucht für die vielen States die zwischen
 * Simulation und Real unterscheiden.
 * 
 * @author s2zehn
 */
public class PrototypFactory {
	private BarcodeScanner barcodeScanner;

	private Kamera kamera;
	private Netzwerk.NetzwerkState netzwerk;
	private Zeitgeber.ZeitgeberState zeitgeber;
	/**
	 * Konstuktor der die Prototypen aufnimmt.
	 * 
	 * @param zeitgeber
	 *            Der Zeitgeber Prototyp.
	 * @param barcodeScanner
	 *            Der Barcodescanner Prototyp.
	 * @param kamera
	 *            Der Kamera Prototyp.
	 * @param netzwerk
	 *            Der Netzwerk Prototyp.
	 */
	public PrototypFactory(
							ZeitgeberState zeitgeber,
							BarcodeScanner barcodeScanner,
							Kamera kamera,
							NetzwerkState netzwerk) {
		super();
		this.zeitgeber = zeitgeber;
		this.barcodeScanner = barcodeScanner;
		this.kamera = kamera;
		this.netzwerk = netzwerk;
	}

	/**
	 * Liefert den BarcodeScanner Clon.
	 * 
	 * @return Den BarcodeScanner Clon.
	 */
	public BarcodeScanner getBarcodeScanner() {
		return (BarcodeScanner) barcodeScanner.clone();
	}

	/**
	 * Liefert den Kammer Clon.
	 * 
	 * @return Den Kammer Clon.
	 */
	public Kamera getKamera() {
		return (Kamera) kamera.clone();
	}

	/**
	 * Liefert das Netzwerk Clon.
	 * 
	 * @return Das Netzwerk Clon.
	 */
	public NetzwerkState getNetzwerk() {
		return (NetzwerkState) netzwerk.clone();
	}

	/**
	 * Liefert den Zeitgeber Clon.
	 * 
	 * @return Den Zeitgeber Clon.
	 */
	public ZeitgeberState getZeitgeber() {
		return (ZeitgeberState) zeitgeber.clone();
	}

}
